# encoding: utf-8
class PerfilesController < ApplicationController
  before_action :set_perfil, only: [:show, :edit, :update, :destroy]
  #skip_before_filter :tiene_perfil?,:perfil_autorizado, :only=>[:perfiles_usuario,:seleccion_perfil]

  # GET /perfiles
  # GET /perfiles.json
  def index
    @perfiles = Perfil.all
  end

  # GET /perfiles/1
  # GET /perfiles/1.json
  def show
  end

  # GET /perfiles/new
  def new
    @perfil = Perfil.new
  end

  # GET /perfiles/1/edit
  def edit
  end

  # POST /perfiles
  # POST /perfiles.json
  def create
    @perfil = Perfil.new(perfil_params)

    respond_to do |format|
      if @perfil.save
        format.html { redirect_to perfiles_path, notice: 'Perfil was successfully created.' }
        format.json { render action: 'show', status: :created, location: @perfil }
      else
        format.html { render action: 'new' }
        format.json { render json: @perfil.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /perfiles/1
  # PATCH/PUT /perfiles/1.json
  def update
    respond_to do |format|
      if @perfil.update(perfil_params)
        format.html { redirect_to perfiles_path, notice: 'Perfil was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @perfil.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /perfiles/1
  # DELETE /perfiles/1.json
  def destroy
    @perfil.destroy
    respond_to do |format|
      format.html { redirect_to perfiles_url }
      format.json { head :no_content }
    end
  end
  

   #Muestra TODAS las vistas del sistema y da la opcion de seleccionar 
  # las que seran mostradas al usuaro a la hora de asignarselas a un perfil
  
  def administracion_vistas

     @controladores = obtener_controladores
 
  end
  
  # Post de la administracion de las pantallas
  def pantallas_sistema
    #Se eliminan todas si esque tienen
    if Pantalla.destroy_all
      controladores= params[:controladores]
      controladores.each do |controlador|
        if controlador.include?("vistas")
          vistas= controlador[:vistas]
          vistas.each do |vista|
  #          if accion.include?("incluir")
              pantalla= Pantalla.new
              pantalla.Vista = vista
              pantalla.Controlador = controlador[:controlador]
  #            pantalla.Descripcion = accion[:descripcion]
              unless pantalla.save
                Pantalla.delete_all #Si falla en alguna se eliminan todas
                logger.warn "Falló al guardar una pantalla: Vista '#{accion[:vista]}' Contolador '#{controlador[:controlador]}' desde #{request.remote_ip} el #{Time.now.utc}"
                render admin_vistas_url, notice: "Falló al guardar una pantalla"
                break
              end
            end
        end
      end
      redirect_to config_pantallas_url, notice: 'Pantallas agregadas al sistema correctamente. FAVOR DE ASIGNAR LOS NOMBRES QUE SE LE MOSTRARAN AL USUARIO'
   end
    
  end
  
  def asignar_pantallas
    @pantallas = Pantalla.all
    @perfil = Perfil.find(params[:idPerfil])
    #@pantallas_perfil= PantallaPerfil.where("IdPerfil= ?",@perfil)
  end
  
  def pantallas_perfil
    perfil= Perfil.find(params[:idPerfil])
    if perfil.perfil_pantallas.destroy_all
      perfiles_pantalla=params[:perfil_pantalla]
      perfiles_pantalla.each do |perfilPantalla|
        #if perfilPantalla.include?("permitir")
          nuevoPermiso = PerfilPantalla.new
          nuevoPermiso.IdPerfil= params[:idPerfil]
          nuevoPermiso.IdPantalla = perfilPantalla[:pantalla]
          unless nuevoPermiso.save
            perfil.perfil_pantallas.delete_all #Si falla en alguna se eliminan todas
            logger.warn "Falló al guardar pantallas del perfil: '#{perfil.Perfl}' desde #{request.remote_ip} el #{Time.now.utc}"
            render pantallas_url(perfil) , notice: "Fallo al guardar los permisos , intentelo de nuevo o informe a su administrador del sistema"
            break            
          end
        #end
      end
      
      redirect_to perfil, notice: 'Permisos agregados al perfil correctamente.'
    end
  end
  
  def perfiles_usuario
    @perfiles_usuario = current_usuario.perfiles
  end
  
  def seleccion_perfil
    
    if params.include?("perfil_usuario")
      self.current_perfil=Perfil.find(params[:perfil_usuario][:idPerfil])
      redirect_to inicio_url
    else
      @perfiles_usuario= current_usuario.perfiles
      render action: "perfiles_usuario" , notice: "Seleccione un perfil"
    end

  
  end
  
  def configuracion_pantallas
    @pantallas=Pantalla.all
  end
  
  def nombres_pantallas
    conf_pantallas = params[:pantallas]
    conf_pantallas.each do |conf_pantalla|
      pantalla=Pantalla.find(conf_pantalla[:idPantalla])
      pantalla.Pantalla= conf_pantalla[:nombre]
      pantalla.Descripcion= conf_pantalla[:descripcion]
      pantalla.save
    end
    
    redirect_to config_pantallas_url, notice: "Configuracion guardada"
  end  

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_perfil
      @perfil = Perfil.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def perfil_params
      params.require(:perfil).permit(:Perfil, :Descripcion, :Estatus)
    end
end
